//对于axios函数库进行二次封装
//你工作的时候是否axios进行二次封装？二次封装的目的是什么呢？
//目的1：利用axios请求、响应拦截器功能
//目的2：请求拦截器，一般可以在请求中携带公共的参数：token
//目的3：响应拦截器，可以简化服务器返回的数据，处理http网络错误

import axios from "axios";

//引入用户相关仓库
import useUserStore from '@/store/modules/user';

import { ElMessage } from "element-plus";
//利用axios.create方法创建一个axios 实例：可以设置基础路径、超时的时间的设置
const request = axios.create({
    baseURL: '/api',    //请求的基础路径的设置
    // timeout: 5000    //超时的时间设置，超出5秒就是请求失败
    // timeout: 50000    //超时的时间设置，超出5秒就是请求失败
})

//请求拦截器
request.interceptors.request.use((config) => {
    //获取用户仓库
    let userStore = useUserStore();
    //token：公共参数，如果用户登录了需要携带
    if (userStore.userInfo.token) {
        config.headers.token = userStore.userInfo.token;
    }
    //config：请求拦截器回调注入的对象（配置对象），配置对象的身上最终要的一件事情headers属性
    //可以通过请求头携带公共参数-token
    // console.log(config);

    return config
})

//响应拦截器
request.interceptors.response.use((response) => {
    //响应拦截成功的回调，一般会进行简化数据
    // console.log(response);

    return response.data;
}, (error) => {
    //处理http网络错误

    console.log(error)
    // let status = error.response.status;
    // switch (status) {
    //     case 401:
    //         //错误提示信息
    //         ElMessage({
    //             type: 'error',
    //             message: error.message 
    //         })
    //         break;
    //     case 404:
    //         //错误提示信息
    //         ElMessage({
    //             type: 'error',
    //             message: error.message  //请求错误，找不到页面
    //         })
    //         break;
    //     case 500 | 501 | 502 | 503 | 504 | 505:
    //         //错误提示信息
    //         ElMessage({
    //             type: 'error',
    //             message: error.message  //服务器挂了
    //         })
    //         break;
    // }
    return Promise.reject(new Error(error.message))
})

//务必对外暴露axios
export default request;